package com.aaa.car.controller;

import com.aaa.car.entity.Car;
import com.aaa.car.entity.CarVo;
import com.aaa.car.entity.MaintainRecord;
import com.aaa.car.service.CarService;
import com.github.pagehelper.PageInfo;
import com.aaa.common.util.Result;
import com.aaa.common.util.ResultStatus;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * (Car)表控制层
 *
 * @author lei chu
 * @since 2021-02-20 19:03:21
 */
@RestController
@RequestMapping("car")
@ApiOperation("car控制器")
public class CarController {
    /**
     * 服务对象
     */
    @Resource
    private CarService carService;

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    @GetMapping("query/{id}")
    public Result<Car> selectOne(@PathVariable("id") Integer id) {
        return new Result<>(ResultStatus.SUCCESS.getCode(),
                ResultStatus.SUCCESS.getMessage(),
                this.carService.queryById(id));
    }

    /**
     * 通过实体作为筛选条件查询
     *
     * @param pageNum  当前页数
     * @param pageSize 每页条数
     * @param car      实例对象
     * @return 分页数据和信息
     */
    @PostMapping("queryAll")
    public Result<PageInfo<Car>> queryAll(Integer pageNum, Integer pageSize, @RequestBody Car car) {
        return new Result<>(ResultStatus.SUCCESS.getCode(),
                ResultStatus.SUCCESS.getMessage(),
                this.carService.queryAll(pageNum, pageSize, car));
    }

    /**
     * 新增数据
     *
     * @param car 实例对象
     * @return 实例对象
     */
    @PostMapping("insert")
    public Result<Car> insert(@RequestBody Car car) {
        return new Result<>(ResultStatus.SUCCESS.getCode(),
                ResultStatus.SUCCESS.getMessage(),
                this.carService.insert(car));
    }

    /**
     * 修改数据
     *
     * @param car 实例对象
     * @return 实例对象
     */
    @PutMapping("update")
    public Result<Car> update(@RequestBody Car car) {
        return new Result<>(ResultStatus.SUCCESS.getCode(),
                ResultStatus.SUCCESS.getMessage(),
                this.carService.update(car));
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @DeleteMapping("delete/{id}")
    public Result<Boolean> deleteById(@PathVariable("id") Integer id) {
        return new Result<>(ResultStatus.SUCCESS.getCode(),
                ResultStatus.SUCCESS.getMessage(),
                this.carService.deleteById(id));
    }

    /**
     * 验证车牌号是否可用
     *
     * @param id id
     * @param vin 要验证的车牌号
     * @return 是否可用
     */
    @GetMapping("checkVin")
    public Result<Boolean> checkVin(@RequestParam("id") String id,@RequestParam("vin") String vin){
        return new Result<>(ResultStatus.SUCCESS.getCode(),
                ResultStatus.SUCCESS.getMessage(),
                this.carService.checkVin(id,vin));
    }

    /**
     * 汽车维修好之后的返厂
     *
     * @param maintainRecord 维修信息
     * @return return
     */
    @PostMapping("carReturnMaintain")
    public Result<Boolean> carReturnMaintain(@RequestBody MaintainRecord maintainRecord){
        System.out.println(maintainRecord);
        return new Result<>(ResultStatus.SUCCESS.getCode(),
                ResultStatus.SUCCESS.getMessage(),
                this.carService.carReturnMaintain(maintainRecord));
    }

    /**
     * 查找满足租出条件的汽车，用于手机端的汽车展示页面
     * @param carVo 租车条件实体
     * @return LIst
     */
    @PostMapping("queryCarByRentalConditions")
    public Result<List<Car>> queryCarByRentalConditions(@RequestBody CarVo carVo){
        System.out.println(carVo);
        return new Result<>(ResultStatus.SUCCESS.getCode(),
                ResultStatus.SUCCESS.getMessage(),
                this.carService.queryCarByRentalConditions(carVo));
    }

}